#include <pthread.h>
#include <iostream>
#include <vector>
#include <unistd.h>
#include <string.h>
using namespace std;
// 定义一个锁
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
// 定义一个条件变量
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
// 定义一个全局变量
int num = 5; // 创建五个线程
int cnt = 0;
void *func(void *args)
{
    string name = (char *)args;
    while (true)
    {
        // 加锁
        pthread_mutex_lock(&mutex);
        // 等待条件变量
        pthread_cond_wait(&cond, &mutex);
        cout << name << "计算cnt=" << cnt++ << endl;
        //解锁
        pthread_mutex_unlock(&mutex);
    }
}
int main()
{
    vector<pthread_t> threads;
    for (int i = 0; i < num; i++)
    {
        pthread_t tid;
        char name[10];
        snprintf(name, sizeof(name), "pthread_%d", i);
        pthread_create(&tid, NULL, func, name);
        threads.push_back(tid);
        sleep(1);
    }
    // //随机唤醒一个线程
    // while(true)
    // {
    //     cout<<"随机唤醒一个线程"<<endl;
    //     pthread_cond_signal(&cond);
    //     sleep(1);
    // }
    //唤醒所有线程
    while(true)
    {
        cout<<"唤醒所有线程"<<endl;
        pthread_cond_broadcast(&cond);
        sleep(1);
    }
    for (int i = 0; i < num; i++)
    {
        // 等待线程
        pthread_join(threads[i], NULL);
    }
    return 0;
}